package are.web;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

public class ManejadorClientes {
	private db conexion = null;
	private Cliente cliente;
	
	public static final int FIND_BY_NIC = 1;
	public static final int FIND_BY_NIS = 2;
	public static final int FIND_BY_NIF = 3;
	public static final int FIND_BY_MEDIDOR = 4;
	
	public db getConexion() {
		return conexion;
	}
	public void setConexion(db conexion) {
		this.conexion = conexion;
	}
	public Cliente getCliente() {
		return cliente;
	}
	public void setCliente(Cliente cliente) {
		this.cliente = cliente;
	}
	public ManejadorClientes(db conexion) {
		super();
		this.conexion = conexion;
	}
	public ManejadorClientes(db conexion, Cliente cliente) {
		super();
		this.conexion = conexion;
		this.cliente = cliente;
	}
	
	public ArrayList<Cliente> List () throws SQLException {
		ArrayList<Cliente> lista = new ArrayList<Cliente>();
		String sql = "select * from clientes order by medidor";
		ResultSet rs = conexion.Query(sql);
		while (rs.next()) {
			Cliente cliente = new Cliente();
			cliente.setNic(rs.getString("nic"));
			cliente.setNis(rs.getString("nis"));
			cliente.setNif(rs.getString("nif"));
			cliente.setDireccion(rs.getString("direccion"));
			cliente.setMedidor(rs.getString("medidor"));
			cliente.setMarca(rs.getString("marca"));
			lista.add(cliente);
		}
		
		
		return lista;
	}

	public boolean Find(String criterio,int filter) throws SQLException {
		boolean result = false;
		String sql = "select * from clientes ";
		switch (filter) {
		case FIND_BY_NIC:
			sql += " where nic = ?";
			break;
		case FIND_BY_NIS:
			sql += " where nis = ?";
			break;
		case FIND_BY_NIF:
			sql += " where nif = ?";
			break;
		case FIND_BY_MEDIDOR:
			sql += " where medidor = ?";
			break;
		}
		java.sql.PreparedStatement pst = conexion.getConnection().prepareStatement(sql);
		pst.setString(1, criterio);
		ResultSet rs = conexion.Query(pst);
		while (rs.next()) {
			cliente = new Cliente();
			cliente.setNic(rs.getString("nic"));
			cliente.setNis(rs.getString("nis"));
			cliente.setNif(rs.getString("nif"));
			cliente.setDireccion(rs.getString("direccion"));
			cliente.setMedidor(rs.getString("medidor"));
			cliente.setMarca(rs.getString("marca"));
			result = true;
		}
		rs.close();
		return result;
	}
	
	public boolean Update(Cliente cliente) throws SQLException {
		boolean result = false;
		String sql = "update clientes set estado=1,transformador = ?, matricula = ?, " +
				"nif_anterior=?, nif_posterior=?, " +
				"latitud=?, longitud=?, anomalia=?, " +
				"observacion=?, fecha_actualizacion=sysdate() " +
				"where medidor = ? and estado = 0";
		java.sql.PreparedStatement pst = conexion.getConnection().prepareStatement(sql);
		pst.setString(1, cliente.getTransformador());
		pst.setString(2, cliente.getMatricula());
		pst.setString(3, cliente.getNif_anterior());
		pst.setString(4, cliente.getNif_posterior());
		pst.setString(5, cliente.getLatitud());
		pst.setString(6, cliente.getLongitud());
		pst.setString(7, cliente.getAnomalia());
		pst.setString(8, cliente.getObservacion());
		pst.setString(9, cliente.getMedidor());
		if (conexion.Update(pst) > 0) {
			conexion.Commit();
			result = true;
		}
		
		return result;
	}
	
	public boolean Exist(String medidor) throws SQLException {
		boolean result = false;
		String sql = "select medidor from clientes where medidor = ?";
		java.sql.PreparedStatement pst = conexion.getConnection().prepareStatement(sql);
		pst.setString(1, medidor);
		ResultSet rs = conexion.Query(pst);
		if (rs.next()) {
			result = true;
		}
		rs.close();
		return result;
	}
	
	public boolean isCreated(String medidor) throws SQLException {
		boolean result = false;
		String sql = "select medidor from nuevo_cliente where medidor = ?";
		java.sql.PreparedStatement pst = conexion.getConnection().prepareStatement(sql);
		pst.setString(1, medidor);
		ResultSet rs = conexion.Query(pst);
		if (rs.next()) {
			result = true;
		}
		rs.close();
		return result;
		
	}
	
	public boolean CreateCliente(Cliente cliente) throws SQLException {
		boolean result = false;
		String sql = "insert into nuevo_cliente (medidor,marca,transformador,matricula,nif_anterior,nif_posterior, anomalia,observacion,latitud,longitud,imei,recurso,fecha_creacion,direccion) values " +
				"(?,?,?,?,?,?,?,?,?,?,?,?,sysdate())";
		java.sql.PreparedStatement pst = conexion.getConnection().prepareStatement(sql);
		pst.setString(1, cliente.getMedidor());
		pst.setString(2, cliente.getMarca());
		pst.setString(3, cliente.getTransformador());
		pst.setString(4, cliente.getMatricula());
		pst.setString(5, cliente.getNif_anterior());
		pst.setString(6, cliente.getNif_posterior());
		pst.setString(7, cliente.getAnomalia());
		pst.setString(8, cliente.getObservacion());
		pst.setString(9, cliente.getLatitud());
		pst.setString(10, cliente.getLongitud());
		pst.setString(11, cliente.getImei());
		pst.setString(12, cliente.getRecurso());
		pst.setString(13, cliente.getDireccion());
		
		
		if (conexion.Update(pst) > 0) {
			conexion.Commit();
			result = true;
		}
		
		return result;
		
	}


}
